#ifndef QUEUE_H_
#define QUEUE_H_

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

//链式队列->队列节点里面包含队列头和尾
struct BinaryTreeNode;
typedef struct BinaryTreeNode *QDataType;

typedef struct QueueNode
{
    QDataType val;          //数据域
    struct QueueNode *next; //指针域
} QNode;

typedef struct Queue
{
    QNode *head; //头节点->队列头
    QNode *tail; //尾结点->队列尾
} Queue;

void QueueInit(Queue *q);              //初始化
void QueueDestory(Queue *q);           //释放队列
void QueuePush(Queue *q, QDataType x); //数据入队列(从队尾进入)
void QueuePop(Queue *q);
bool QueueEmpty(Queue *q);      //判断队列是否为空
size_t QueueSize(Queue *q);     //队列长度
QDataType QueueFront(Queue *q); //队头数据
QDataType QueueBack(Queue *q);  //队尾数据

#endif